package cn.e4j.modular.crm.service.impl;

import cn.e4j.core.dto.Dtos;
import cn.e4j.core.dto.impl.Dto;
import cn.e4j.core.shiro.ShiroKit;
import cn.e4j.core.shiro.ShiroUser;
import cn.e4j.core.util.InvokeUtil;
import cn.e4j.modular.crm.entity.GwedT;
import cn.e4j.modular.crm.mapper.Gwei006Mapper;
import cn.e4j.modular.crm.service.Gwei006Service;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class Gwei006ServiceImpl extends ServiceImpl<Gwei006Mapper, GwedT> implements Gwei006Service {

    @Override
    public void addData(List<GwedT> list) {
        ShiroUser shiroUser = ShiroKit.getUser();

        for (int i = 0; i < list.size(); i++) {
            GwedT gwed = list.get(i);
            gwed.setGWEDENT(shiroUser.getDBC());
            gwed.setGWEDLEGAL(gwed.getGWEDPLANT());
            gwed.setGWED012(gwed.getGWEDACTI());
            gwed.setGWEDCONF("N");
            gwed.insert();
        }
    }

    @Override
    public void editData(List<GwedT> list) {
        ShiroUser shiroUser = ShiroKit.getUser();
        String DBC = shiroUser.getDBC();
        UpdateWrapper<GwedT> gwedTUpdateWrapper = new UpdateWrapper<>();
        gwedTUpdateWrapper.eq("GWEDENT", DBC);
        gwedTUpdateWrapper.eq("GWEDDOCNO", list.get(0).getGWEDDOCNO());
        list.get(0).delete(gwedTUpdateWrapper);

        for (int i = 0; i < list.size(); i++) {
            GwedT gwed = list.get(i);
            gwed.setGWEDENT(shiroUser.getDBC());
            gwed.setGWED012(gwed.getGWEDACTI());
            gwed.insert();
        }
    }

    @Override
    public void review(List<GwedT> list) {
        ShiroUser shiroUser = ShiroKit.getUser();

        String ENT = shiroUser.getDBC();
        for (int i = 0; i < list.size(); i++) {
            GwedT updateGwed = new GwedT();
            UpdateWrapper<GwedT> gwedTUpdateWrapper = new UpdateWrapper<>();

            String DOCNO = list.get(i).getGWEDDOCNO();

            updateGwed.setGWEDCONF("Y");
            gwedTUpdateWrapper.eq("GWEDENT", ENT);
            gwedTUpdateWrapper.eq("GWEDDOCNO", DOCNO);
            updateGwed.update(gwedTUpdateWrapper);
        }
    }

    @Override
    public Dto cancelReview(List<GwedT> list) {
        ShiroUser shiroUser = ShiroKit.getUser();
        Dto outDto = Dtos.newDto();

        String ENT = shiroUser.getDBC();

        for (int i = 0; i < list.size(); i++) {
            UpdateWrapper<GwedT> gwedTUpdateWrapper = new UpdateWrapper<>();
            String DOCNO = list.get(i).getGWEDDOCNO();

            Dto checkDto = Dtos.newDto();
            checkDto.put("ENT",ENT);
            checkDto.put("GWEDDOCNO",DOCNO);
            List<Dto> gwefList = this.baseMapper.getGwefCount(checkDto);
            if(gwefList.size() > 0) {
                outDto.setAppCode(500);
                outDto.setAppMsg("存在已经被发票使用的数据，无法取消审核");
                return outDto;
            }

            GwedT updateGwed = new GwedT();

            updateGwed.setGWEDCONF("N");
            gwedTUpdateWrapper.eq("GWEDENT", ENT);
            gwedTUpdateWrapper.eq("GWEDDOCNO", DOCNO);
            updateGwed.update(gwedTUpdateWrapper);
        }


        outDto.setAppCode(200);
        return outDto;
    }

    @Override
    public void delete(GwedT gwedT) {
        ShiroUser shiroUser = ShiroKit.getUser();
        UpdateWrapper<GwedT> gwedTUpdateWrapper = new UpdateWrapper<>();
        gwedTUpdateWrapper.eq("GWEDENT", shiroUser.getDBC());
        gwedTUpdateWrapper.eq("GWEDDOCNO", gwedT.getGWEDDOCNO());
        gwedTUpdateWrapper.eq("GWEDSEQ", gwedT.getGWEDSEQ());
        gwedT.delete(gwedTUpdateWrapper);
    }

    @Override
    public void deleteBatch(List<GwedT> list) {
        for (int i = 0; i < list.size(); i++) {
            this.delete(list.get(i));
        }
    }

    @Override
    public List<Dto> getList(Page<Object> page, Dto dto) {
//        return this.baseMapper.listPage(page,dto);
        return InvokeUtil.invokeBeanMethod("gwei006Mapper,listPage",page,dto);
    }

    @Override
    public List<Dto> getGweddocnoListPage(Page<Object> page, Dto dto) {
        return this.baseMapper.getGweddocnoListPage(page,dto);
    }

    @Override
    public List<Dto> getGwed001ListPage(Page<Object> page, Dto dto) {
        return this.baseMapper.getGwed001ListPage(page,dto);
    }


    @Override
    public List<Dto> getGwedmlegalPage(Page<Object> page, Dto dto) {
        return this.baseMapper.getGwedmlegalPage(page,dto);
    }

    @Override
    public List<Dto> getGwecPage(Page<Object> page, Dto dto) {
//        return this.baseMapper.getGwecPage(page,dto);
        return InvokeUtil.invokeBeanMethod("gwei006Mapper,getGwecPage",page,dto);
    }

    @Override
    public Dto listOrg(Dto dto) {
        return this.baseMapper.listOrg(dto);
    }

    @Override
    public List<Dto> getGwedData(Dto dto) {
//        return this.baseMapper.getGwedData(dto);
        return InvokeUtil.invokeBeanMethod("gwei006Mapper,getGwedData",dto);
    }

    @Override
    public Dto getGwed101(Dto dto) {
        return this.baseMapper.getGwed101(dto);
//        return  InvokeUtil.invokeBeanMethod("gwei006Mapper,getGwed101",dto);
    }

    @Override
    public Dto getAzpFile(Dto dto) {
        return this.baseMapper.getAzpFile(dto);
    }

    @Override
    public Dto getOeb(Dto dto) {
        return this.baseMapper.getOeb(dto);
    }

    @Override
    public Dto getGwcsData(Dto dto) {
        return this.baseMapper.getGwcsData(dto);
    }

    @Override
    public List<Dto> getGwedByDoc(Dto dto) {
        return this.baseMapper.getGwedByDoc(dto);
    }

    @Override
    public Dto getGwak(Dto dto) {
        return this.baseMapper.getGwak(dto);
    }

    @Override
    public Dto getGwed011Sum(Dto dto) {
        return this.baseMapper.getGwed011Sum(dto);
    }

}
